之前的项目需要做一个后端管理的web,既然要做,就挑战一下自己吧,打算使用react+redux 做一个单界面的应用。为什么要用这个组合去做呢,React我就不解释了,这是最近非常火的一个前端框架,但是他还是有一些缺点的,比如他在各组件之间的数据交互相对来说比较麻烦,而Redux的作用就是用来管理数据流,管理状态,所以选择用React和Redux结合起来做。
这里还要使用一些其他的框架,使用 react-redux 去连接React和Redux;使用 react-router 和 react-router-redux 去做前端路由;使用 redux-thunk 去支持异步action等。
下面了解一下Redux的数据流(按顺序进行):
首先触发action:action 可以理解为应用向 store 传递的数据信息(一般为用户交互信息)。在实际应用中,传递的信息可以约定一个固定的数据格式,简单形式如下
dispatch(action):这是一个同步的过程:执行 reducer 更新 state -> 调用 store 的监听处理函数。如果需要在 dispatch 时执行一些异步操作可以通过引入 Middleware(redux-thunk) 解决。
最后reducer 改变状态:reducer的作用就是根据现在的state和action来得到新的state,也就是说这有在这一步state树才会被改变。
下面结合我的代码去说明:(这里以获取课程信息为例)
首先是前端目录结构:
|
|
action/course.js:
因为action函数是不支持异步的,所以这里将异步操作放到getCoursesAction函数里面,当异步获取成功数据之后通过dispacth调用getCourse函数将数据提交给reducer处理。
reducers/course.js:
其实这里的参数action就是我们在action/course.js中返回的数据
所以我们通过action.type获取我们约定的操作,这里我们如果type是“Get_Courses”就会根据action里面的data更新state。
store/rootStore.js:
|
|
containers/course.js
index.js:
index.js的作用主要是把所有的东西连在一起,这里使用了react-router中的 syncHistoryWithStore 函数去做前端路由,这样我的单页面应用就建起来了.